
#ifndef _LISTETEMPC_H
#define _LISTETEMPC_H

/**
 * @file ListeTempC.h
 * @brief Contient la structure ListeTempC et ses fonctions
 * @details liste des fonctions pour le module ListeTempC
 * @version 1.0
 * @date 2013/05/16
*/
#include "carte.h"
#include "lireFichier.h"

/**
* @struct ListeTempC structure listeTempC
* @brief Structure ListeTempC
* @details Permet de distribuer les cartes aléatoirement, ListeTempC(tab_de_pointeur_sur_carte, entier, entier)
*/
typedef struct
{
    Carte *tab;
	unsigned int taille_utilisee;
	unsigned int capacite;
} ListeTempC;

/**
* @fn creerListeTC()
* @brief Alloue la mémoire pour la liste temporaire de cartes et appel initListeTempC
* @param void
* @return ListeTempC* pointeur sur la liste creer.
*/
ListeTempC * creerListeTC();
/**
* @fn initListeTempC(ListeTempC *)
* @brief Initialise la liste temporaire de questions envoyée en paramètre : taille_utilisé = 0 et capacité = 1
* @param [in-out] ListeTempC* pointeur sur la liste.
* @return void
*/
void initListeTempC(ListeTempC *);
/**
* @fn ajouterCarte(ListeTempC *, const Carte *)
* @brief Ajoute une carte à la liste temporaire
* @param [in-out] ListeTempC* pointeur sur la liste.
* @param [in] Carte*  pointeur sur carte.
* @return void
*/
void ajouterCarte(ListeTempC *, const Carte *);
/**
* @fn testamentListeTempC(ListeTempC *)
* @brief fais appel a libereCarte et met capacité et taille_utilisée a 0.
* @param [in-out] ListeTempC* pointeur sur la liste.
* @return void
*/
void testamentListeTempC(ListeTempC *);
/**
* @fn detruireListeTempC(ListeTempC **)
* @brief fais appel a testamentListeTempC et met le pointeur a NULL.
* @param [in-out] ListeTempC** pointeur sur pointeur sur la liste.
* @return void
*/
void detruireListeTempC(ListeTempC **);
/**
* @fn supprimerElementListeC(ListeTempC *, int)
* @brief supprime l'elet de la liste dont l'indice est passé en param .
* @param [in-out] ListeTempC* pointeur sur la liste.
* @param [in] int l'indice de l'elet à supprimer.
* @return void
*/
void supprimerElementListeC(ListeTempC *, int);
/**
* @fn nbrElementListeC(const ListeTempC *)
* @brief compte le nombre d'elet dans la liste.
* @param [in] ListeTempC* pointeur sur la liste.
* @return int le nombre d'elet de la liste.
*/
int nbrElementListeC(const ListeTempC *);
/**
* @fn initNbrAlea2()
* @brief initialise le tirage aleatoire.
* @param void
* @return void
*/
void initNbrAlea2();
/**
* @fn nbrAleatoire2(const int)
* @brief tirage aleatoire d'un entier .
* @param [in] int nbr ( %nbr).
* @return int le nombre obtenu.
*/
int nbrAleatoire2(const int);
/**
* @fn remplirCarteFichier(FILE *, ListeTempC *)
* @brief remplis la liste de cartes a partir d'un fichier txt .
* @param [in-out] ListeTempC* pointeur sur la liste.
* @param [in] FILE* fichier txt.
* @return void
*/
void remplirCarteFichier(FILE *, ListeTempC *);
/**
* @fn testRegressionLTC()
 * @brief testRegressionLTC fais appel a toutes les fonctions du module ListeTempC et effectue des Tests.
 * @return void
*/
void testRegressionLTC();

#endif
